package com.example.infrastructure.persistent.generator;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class AutoGenerator {

    // 数据库连接信息
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/big_market?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=false";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";

    private static final String outputDir =
            System.getProperty("user.dir") + "\\big-market-infrastructure\\src\\main\\java";

    private static final String parentPacket = "com.example" + ".infrastructure.persistent";

    private static final String mapperXmlPath =
            System.getProperty("user.dir") + "\\big-market-app\\src\\main\\resources\\mybatis\\mapper";

    public static void main(String[] args) {
        // 需要生成代码的表
        List<String> tables = new ArrayList<>();
        tables.add("raffle_activity");
        tables.add("raffle_activity_count");
        tables.add("raffle_activity_sku");

        // 配置全局设置
        FastAutoGenerator.create(URL, USERNAME, PASSWORD)
                .globalConfig(builder -> {
                    builder.author("三石")               // 作者名称
                            .outputDir(outputDir)    // 输出目录路径
                            .commentDate("yyyy-MM-dd") // 注释日期格式
                            ;

                })
                // 配置包结构
                .packageConfig(builder -> {
                    builder.parent(parentPacket)  // 父包名称
                            .entity("po")
                            .mapper("dao")
                            .xml("mapper").pathInfo(Collections.singletonMap(OutputFile.xml, mapperXmlPath));  // XML文件的输出目录路径
                })
                // 配置代码生成策略
                .strategyConfig(builder -> {
                    builder.addInclude(tables)
                            .entityBuilder()
                            .formatFileName("%sPO")
                            .enableLombok()
                            .enableTableFieldAnnotation()  // 启用表字段注释（例如@TableField）

                            .mapperBuilder()
                            .enableBaseResultMap()  // 为所有表启用一个通用的resultMap生成
                            .formatMapperFileName("I%sDao")  // Mapper文件名格式
                            .enableMapperAnnotation()  // 启用Mapper注释
                            .formatXmlFileName("%sMapper")  // XML文件名格式
                    ;
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker模板引擎（默认为Velocity）
                .execute();
    }

}

